/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package econutri.persistencia.dao;

import econutri.persistencia.entidades.Usuario;
import econutri.persistencia.TransactionDAO;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Leonardo Oliveira Moreira
 */
public class UsuarioDAO {

    public Usuario getUsuario(Long codigo) {
        if (codigo == null) {
            return null;
        }
        Usuario usuario = new Usuario();
        TransactionDAO dao = new TransactionDAO();
        String sql = "select " +
                "codigo, nome, sexo, login, senha " +
                "from usuario where codigo = " + codigo;
        ResultSet rs = dao.executeQuery(sql);
        try {
            while (rs != null && rs.next()) {
                usuario.setCodigo(rs.getLong("codigo"));
                usuario.setNome(rs.getString("nome"));
                usuario.setSexo(rs.getString("sexo"));
                usuario.setLogin(rs.getString("login"));
                usuario.setSenha(rs.getString("senha"));
            }
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            dao.rollback();
        }
        dao.commit();
        dao.close();
        return usuario;
    }

    public Usuario getUsuarioByLogin(String login) {
        if (login == null) {
            return null;
        }
        Usuario usuario = new Usuario();
        TransactionDAO dao = new TransactionDAO();
        String sql = "select " +
                "codigo, nome, sexo, login, senha " +
                "from usuario where login = '" + login + "'";
        ResultSet rs = dao.executeQuery(sql);
        try {
            while (rs != null && rs.next()) {
                usuario.setCodigo(rs.getLong("codigo"));
                usuario.setNome(rs.getString("nome"));
                usuario.setSexo(rs.getString("sexo"));
                usuario.setLogin(rs.getString("login"));
                usuario.setSenha(rs.getString("senha"));
            }
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            dao.rollback();
        }
        dao.commit();
        dao.close();
        return usuario;
    }

    public List<Usuario> getUsuarios() {
        List<Usuario> result = new ArrayList<Usuario>();
        TransactionDAO dao = new TransactionDAO();
        String sql = "select " +
                "codigo, nome, sexo, login, senha " +
                "from usuario";
        ResultSet rs = dao.executeQuery(sql);
        try {
            while (rs != null && rs.next()) {
                Usuario usuario = new Usuario();
                usuario.setCodigo(rs.getLong("codigo"));
                usuario.setNome(rs.getString("nome"));
                usuario.setSexo(rs.getString("sexo"));
                usuario.setLogin(rs.getString("login"));
                usuario.setSenha(rs.getString("senha"));
                result.add(usuario);
            }
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            dao.rollback();
        }
        dao.commit();
        dao.close();
        return result;
    }

    public List<Usuario> getUsuarios(Long codigo, String nome) {
        List<Usuario> result = new ArrayList<Usuario>();
        TransactionDAO dao = new TransactionDAO();
        String sql = "select " +
                "codigo, nome, sexo, login, senha from usuario " +
                "where (-1 = " + codigo + " or codigo = " + codigo + ") and " +
                "nome like '" + nome + "'";
        ResultSet rs = dao.executeQuery(sql);
        try {
            while (rs != null && rs.next()) {
                Usuario usuario = new Usuario();
                usuario.setCodigo(rs.getLong("codigo"));
                usuario.setNome(rs.getString("nome"));
                usuario.setSexo(rs.getString("sexo"));
                usuario.setLogin(rs.getString("login"));
                usuario.setSenha(rs.getString("senha"));
                result.add(usuario);
            }
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            dao.rollback();
        }
        dao.commit();
        dao.close();
        return result;
    }

    public List<Usuario> getUsuarios(Long codigo, String nome, String sexo) {
        List<Usuario> result = new ArrayList<Usuario>();
        TransactionDAO dao = new TransactionDAO();
        String sql = "select " +
                "codigo, nome, sexo, login, senha from usuario " +
                "where (-1 = " + codigo + " or codigo = " + codigo + ") and " +
                "nome like '" + nome + "' and " +
                "sexo like '" + sexo + "'";
        ResultSet rs = dao.executeQuery(sql);
        try {
            while (rs != null && rs.next()) {
                Usuario usuario = new Usuario();
                usuario.setCodigo(rs.getLong("codigo"));
                usuario.setNome(rs.getString("nome"));
                usuario.setSexo(rs.getString("sexo"));
                usuario.setLogin(rs.getString("login"));
                usuario.setSenha(rs.getString("senha"));
                result.add(usuario);
            }
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            dao.rollback();
        }
        dao.commit();
        dao.close();
        return result;
    }

    public boolean inserir(Usuario usuario) {
        if (usuario == null) {
            return false;
        }
        boolean result = false;
        String sql = "insert into usuario (" +
                "nome, " +
                "sexo, " +
                "login, " +
                "senha" +
                ") values ('" +
                usuario.getNome() + "', '" +
                usuario.getSexo() + "', '" +
                usuario.getLogin() + "', '" +
                usuario.getSenha() + "')";
        TransactionDAO dao = new TransactionDAO();
        result = dao.insert(sql);
        if (result)
            dao.commit();
        else
            dao.rollback();
        dao.close();
        return result;
    }

    public boolean atualizar(Usuario usuario) {
        if (usuario == null) {
            return false;
        }
        int sqlUpdate = 0;
        boolean result = false;
        String sql = "update usuario set " +
                "nome = '" + usuario.getNome() + "', " +
                "sexo = '" + usuario.getSexo() + "', " +
                "login = '" + usuario.getLogin() + "', " +
                "senha = '" + usuario.getSenha() + "' " +
                "where codigo = " + usuario.getCodigo();
        TransactionDAO dao = new TransactionDAO();
        sqlUpdate = dao.update(sql);
        result = (sqlUpdate > 0);
        if (result) {
            dao.commit();
        }
        else
            dao.rollback();
        dao.close();
        return result;
    }
    
}
